package com.mjf.kxml.domain;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mjf.kxml.util.CKHttpSendUtil;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 * desc
 * </p>
 *
 * @author chenshoumeng
 * @date 2025/6/4 20:53
 */
@Data
@TableName("u8receivable")
public class Receivable {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String ccarGsname;             // 公司名称
    private String ccarGscode;             // 公司编码
    private String ccarCreateUser;         // 创建人姓名
    private String ccarCreateUserCode;     // 创建人编码
    private String ccarCreatetime;         // 创建时间 YYYY-MM-DD
    private String ccarModifytime;         // 更新时间 YYYY-MM-DD
    private String ccarIsDeleted;          // 数据状态（0/1）
    private String ccarAcntmcode;          // 本方单位编码（统一社会信用代码）
    private String ccarAcntmname;          // 本方单位名称
    private String ccarVendorname;         // 客商名称
    private String ccarVendorcode;         // 客商统一社会信用代码
    private String ccarArAdditems;         // 应收增项唯一标识
    private String ccarContractCode;       // 合同编号
    private String ccarContractName;       // 合同名称
    private String ccarProjectCode;        // 项目编号
    private String ccarProjectName;        // 项目名称
    private String ccarAccountSubject;     // 会计科目名称
    private String ccarFundOriginal;       // 款项金额（原币）
    private String ccarFundLocal;          // 款项金额（本币）
    private String ccarCurrenctcode;       // 币种代码
    private String ccarRate;               // 汇率
    private String ccarAccountdate;        // 入账日期 YYYY-MM-DD
    private String ccarDuedate;            // 到期日期 YYYY-MM-DD
    private String ccarPurpose;            // 款项用途
    private String ccarPaymentterm;        // 账期天数
    private String ccarAdditemtype;        // 增项类型
    /** 备用字段 示例：<ccar_standby1></ccar_standby1> */
    private String ccarStandby1;

    /** 备用字段 示例：<ccar_standby2></ccar_standby2> */
    private String ccarStandby2;

    /** 备用字段 示例：<ccar_standby3></ccar_standby3> */
    private String ccarStandby3;

    /** 备用字段 示例：<ccar_standby4></ccar_standby4> */
    private String ccarStandby4;

    /** 备用字段 示例：<ccar_standby5></ccar_standby5> */
    private String ccarStandby5;

    /** 备用字段 示例：<ccar_standby6></ccar_standby6> */
    private String ccarStandby6;

    /** 备用字段 示例：<ccar_standby7></ccar_standby7> */
    private String ccarStandby7;

    /** 备用字段 示例：<ccar_standby8></ccar_standby8> */
    private String ccarStandby8;

    /** 备用字段 示例：<ccar_standby9></ccar_standby9> */
    private String ccarStandby9;

    /** 备用字段 示例：<ccar_standby10></ccar_standby10> */
    private String ccarStandby10;
    // 数据获取时间
    private LocalDateTime times;
    // 推送标识 0-未推送 1-推送成功 2-推送失败
    private String pullsk;
    // 推送数据返回结果
    private String pullskoutstr;
    // 推送时间
    private LocalDateTime pulltime;

    public static String buildObjectXml(String onlyTag, List<Receivable> vendors, List<Invoices> invoices) {
        StringBuilder sb = new StringBuilder();
        Map<Long, List<Invoices>> invoicesMap = invoices.stream().collect(Collectors.groupingBy(Invoices::getRecId));
        sb.append("<Object>\n")
            .append("    <ccar_onlytag>").append(onlyTag).append("</ccar_onlytag>\n")
            .append("    <ccar_ar_lists>\n");
        for (Receivable vendor : vendors) {
            sb.append("        <ccar_ar>\n")
                .append("            <ccar_gsname>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarGsname())).append("</ccar_gsname>\n")
                .append("            <ccar_gscode>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarGscode())).append("</ccar_gscode>\n")
                .append("            <ccar_create_user>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarCreateUser())).append("</ccar_create_user>\n")
                .append("            <ccar_create_user_code>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarCreateUserCode())).append("</ccar_create_user_code>\n")
                .append("            <ccar_createtime>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarCreatetime())).append("</ccar_createtime>\n")
                .append("            <ccar_modifytime>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarModifytime())).append("</ccar_modifytime>\n")
                .append("            <ccar_is_deleted>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarIsDeleted())).append("</ccar_is_deleted>\n")
                .append("            <ccar_acntmcode>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarAcntmcode())).append("</ccar_acntmcode>\n")
                .append("            <ccar_acntmname>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarAcntmname())).append("</ccar_acntmname>\n")
                .append("            <ccar_vendorname>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarVendorname())).append("</ccar_vendorname>\n")
                .append("            <ccar_vendorcode>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarVendorcode())).append("</ccar_vendorcode>\n")
                .append("            <ccar_ar_additems>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarArAdditems())).append("</ccar_ar_additems>\n")
                .append("            <ccar_contract_code>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarContractCode())).append("</ccar_contract_code>\n")
                .append("            <ccar_contract_name>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarContractName())).append("</ccar_contract_name>\n")
                .append("            <ccar_project_code>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarProjectCode())).append("</ccar_project_code>\n")
                .append("            <ccar_project_name>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarProjectName())).append("</ccar_project_name>\n")
                .append("            <ccar_account_subject>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarAccountSubject())).append("</ccar_account_subject>\n")
                .append("            <ccar_fund_original>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarFundOriginal())).append("</ccar_fund_original>\n")
                .append("            <ccar_fund_local>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarFundLocal())).append("</ccar_fund_local>\n")
                .append("            <ccar_currenctcode>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarCurrenctcode())).append("</ccar_currenctcode>\n")
                .append("            <ccar_rate>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarRate())).append("</ccar_rate>\n")
                .append("            <ccar_accountdate>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarAccountdate())).append("</ccar_accountdate>\n")
                .append("            <ccar_duedate>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarDuedate())).append("</ccar_duedate>\n")
                .append("            <ccar_purpose>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarPurpose())).append("</ccar_purpose>\n")
                .append("            <ccar_paymentterm>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarPaymentterm())).append("</ccar_paymentterm>\n")
                .append("            <ccar_additemtype>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarAdditemtype())).append("</ccar_additemtype>\n")
                .append("            <ccar_standby1>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby1())).append("</ccar_standby1>\n")
                .append("            <ccar_standby2>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby2())).append("</ccar_standby2>\n")
                .append("            <ccar_standby3>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby3())).append("</ccar_standby3>\n")
                .append("            <ccar_standby4>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby4())).append("</ccar_standby4>\n")
                .append("            <ccar_standby5>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby5())).append("</ccar_standby5>\n")
                .append("            <ccar_standby6>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby6())).append("</ccar_standby6>\n")
                .append("            <ccar_standby7>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby7())).append("</ccar_standby7>\n")
                .append("            <ccar_standby8>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby8())).append("</ccar_standby8>\n")
                .append("            <ccar_standby9>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby9())).append("</ccar_standby9>\n")
                .append("            <ccar_standby10>").append(CKHttpSendUtil.jurEmpty(vendor.getCcarStandby10())).append("</ccar_standby10>\n");
            sb.append("            <ccar_invoices_lists>\n");
            if (invoicesMap.containsKey(vendor.getId()) && CollectionUtil.isNotEmpty(invoicesMap.get(vendor.getId()))) {
                for (Invoices invoice : invoicesMap.get(vendor.getId())) {
                    sb.append("                <ccar_invoices>\n");
                    sb.append("                    <ccar_invoice>").append(CKHttpSendUtil.jurEmpty(invoice.getCcarInvoice())).append("</ccar_invoice>\n");
                    sb.append("                    <ccar_invoice_standby1>").append(CKHttpSendUtil.jurEmpty(invoice.getCcarInvoiceStandby1())).append("</ccar_invoice_standby1>\n");
                    sb.append("                    <ccar_invoice_standby2>").append(CKHttpSendUtil.jurEmpty(invoice.getCcarInvoiceStandby2())).append("</ccar_invoice_standby2>\n");
                    sb.append("                </ccar_invoices>\n");
                }
            }

            sb.append("            </ccar_invoices_lists>\n");
            sb.append("        </ccar_ar>\n");
        }
        sb.append("    </ccar_ar_lists>\n")
            .append("</Object>");
        return sb.toString();
    }

}
